Ví dụ Abstract factory

Giả sử ta cần viết một ứng dụng quản lý địa chỉ và số điện thoại cho các quốc gia trên thế giới. Địa chỉ và số địa thoại của mỗi quốc gia sẽ có một số điểm giống nhau và một số điểm khác nhau. Ta xây dựng các lớp như ví dụ sau:

abstract class Address{    public abstract void Show();}abstract class Phone{	public abstract void Show();}abstract class Factory{	virtual public Address createAddress()	{		return null;	}	virtual public Phone createPhone()	{		return null;	}}class USAddress: Address{	public override void Show()	{		Console.WriteLine("USA Address");	}}class USPhone: Phone{	public override void Show()	{		Console.WriteLine("USA Phone");	}}class VNAddress: Address{	public override void Show()	{		Console.WriteLine("Viet Nam address");	}}class VNPhone:Phone{	public override void Show()	{		Console.WriteLine("Viet Nam phone");	}}class USFactory: Factory{	public override Address createAddress()	{		return new USAddress();	}	public override Phone createPhone()	{		return new USPhone();	}}class VNFactory:Factory{	public override Address createAddress()	{		return new VNAddress();	}	public override Phone createPhone()	{		return new VNPhone();	}}class Program{	static void Main(string[] args)	{		Factory factory = new VNFactory();		Address address = factory.createAddress();		Phone phone = factory.createPhone();	   		Console.WriteLine("Create Object by VNFactory");		address.Show();		phone.Show();		factory = new USFactory();		address = factory.createAddress();		phone = factory.createPhone();		Console.WriteLine("Create Object by USFactory");		address.Show();		phone.Show();		Console.ReadKey();	}}